#include "drv_OpticalCar.h"


void delay(long t) {
    for(;t > 0; t--);
}


void PWM_Pin_Config(void) {
    GPIO_InitTypeDef _st_g;
    
    _st_g.GPIO_Pin = PIN_PWM_A1 | PIN_PWM_A2;
    _st_g.GPIO_Mode = GPIO_Mode_Out_PP;
    _st_g.GPIO_Speed = GPIO_Speed_50MHz;
    
    GPIO_Init(PORT_PWM_A, &_st_g);
    
    _st_g.GPIO_Pin = PIN_PWM_B1 | PIN_PWM_B2;
    GPIO_Init(PORT_PWM_B, &_st_g);
}


void PWM_Pin_Toggle(void) {
    static int _state = 0;
    
    _state = !_state;
    if (_state) {
        GPIO_SetBits(PORT_PWM_A, PIN_PWM_A1);
        GPIO_ResetBits(PORT_PWM_A, PIN_PWM_A2);
        GPIO_SetBits(PORT_PWM_B, PIN_PWM_B1);
        GPIO_ResetBits(PORT_PWM_B, PIN_PWM_B2);
}

    else {
        GPIO_ResetBits(PORT_PWM_A, PIN_PWM_A1);
        GPIO_SetBits(PORT_PWM_A, PIN_PWM_A2);
        GPIO_ResetBits(PORT_PWM_B, PIN_PWM_B1);
        GPIO_SetBits(PORT_PWM_B, PIN_PWM_B2);
    }
}


void IIC_Pin_Config(void) {
    GPIO_InitTypeDef _st_g;
    
    _st_g.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
    _st_g.GPIO_Mode = GPIO_Mode_Out_PP;
    _st_g.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &_st_g);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
}


void IIC_Pin_Toggle(void) {
    static int _state = 0;
    
    _state = !_state;
    if (_state) {
        GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);
    }
    else {
        GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);
    }
}


int main() {
    
    
    drv_Car_Init();
    PWM_Pin_Config();
    IIC_Pin_Config();
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    //GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
    
    long _interval = 0x4fffff;
    
    while (1) {
        Car_LED_PWR_On();
        delay(_interval*3);
        
        Car_LED_PWR_Off();
        delay(_interval);
        
        PWM_Pin_Toggle();
        IIC_Pin_Toggle();
    }
}
